# ------------------命令------------------
# 启动Nginx： nginx 或 nginx -s start
# 停止Nginx： nginx -s stop
# 重启Nginx： nginx -s restart
# 检查Nginx配置文件是否正确： nginx -t
# 打开Nginx主进程PID文件： nginx -s reopen
# 关闭Nginx，并在处理完当前请求后退出： nginx -s quit

# nginx 配置文件结构
"""
main{
    event: "配置工作模式以及连接数"{}
    http "http模块"{
        server:"虚拟主机配置" 可以有多个{
                location
                    路由规则，表达式

                upstream
                    集群，内网服务器
        }
        server:{
            .....
        }
    }
}
"""

# ------------------配置反向代理------------------
# http {
#   server {
#     listen       80;
#     server_name  demoxxx.com;  # 替换为您的域名

#     location / {
#       proxy_pass http://backend-server;  # ------ backend-server ------
#       proxy_set_header Host $host;
#       proxy_set_header X-Real-IP $remote_addr;
#       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#     }
#   }

#   upstream backend-server {   #配置反向代理
#     server localhost:8088 weight=2;  # 替换为您的后端服务器地址
#     server localhost:8099 weight=1;  # 可以添加多个后端服务器
#   }
# }



# ------------------负载均衡------------------
# 轮询算法（默认）
# upstream backend {
#     server server1;
#     server server2;
# }
# 
# IP_HASH算法
# upstream backend {
#     ip_hash;
#     server server1;
#     server server2;
# }
# 
# Weighted算法
# upstream backend {
#     server server1 weight=5;
#     server server2 weight=1;
# }
# URL_HASH算法
# upstream backend {
#     hash $request_uri;
#     server server1;
#     server server2;
# }



# 限制特定IP地址或IP地址段的访问
# location / {
#     # 允许特定IP地址范围的访问
#     allow 192.168.1.0/24;
#     allow 10.0.0.0/16;

#     # 拒绝其他IP地址的访问
#     deny all;
# }


# 启用HTTPS（SSL/TLS）支持  ，  server 中添加
# ssl_certificate /path/to/ssl.crt;
# ssl_certificate_key /path/to/ssl.key;

# # SSL加密算法配置
# ssl_protocols TLSv1.2 TLSv1.3;
# ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
# ssl_prefer_server_ciphers on;


"""
server {  ------------------------------# 静态文件匹配-------------------------
    listen 80;
    server_name demoxxx.com;    # 服务器的域名

    root /path/to/static/files;     # 静态文件的根目录

    location / {    # 匹配所有请求路径
        try_files $uri $uri/ =404;     # 尝试按照给定顺序寻找请求路径所对应的文件，如果文件不存在，则返回404错
    }
}


server {  ------------------------------# 动态文件匹配-------------------------
    listen 80;
    server_name demoxxx.com;

    root /path/to/dynamic/files;

    location / {
        try_files $uri $uri/ @backend;
    }

    location @backend {      -------------@backend是一个自定义的名称-------------------
        proxy_pass http://127.0.0.1:8000;  # 将请求转发给后端服务器
        proxy_set_header Host $http_host;  --- proxy_set_header 设置转发请求时的一些HTTP头部信息，比如Host和X-Real-IP
        proxy_set_header X-Real-IP $remote_addr;
    }
}

"""


#    -------------缓存静态文件-------------------
# http {
#     # ... 其他配置 ...

#     # 定义缓存路径和缓存时间
#     # /path/to/cache是指定缓存存储路径，
#     # levels=1:2表示使用两级目录结构进行存储，
#     # keys_zone=my_cache:10m定义了缓存区域的名称my_cache和大小10m，
#     # inactive=60m 表示在60分钟内未被访问的缓存将被清理
      # max_size 缓存文件总大小超过100G后自动释放淘汰
#     proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m max_sizee=100g;
#     proxy_temp_path /path/to/temp;

#     server {
#         # ... 其他配置 ...

#         location / {
#             # 检查缓存，如有则直接返回
#             proxy_cache my_cache;
#             proxy_cache_valid 200 302 10m;
#             proxy_cache_valid 404 1m;
#             proxy_cache_key $uri$is_args$args;

#             # 如果没有缓存，则从后端服务器获取文件并缓存
#             proxy_pass http://backend_server;
#             proxy_cache_bypass $http_cache_control;
#             proxy_no_cache $http_pragma $http_authorization;
#         }
#     }
# }


# rewrite指令来实现HTTP重定向